/*
    作者：zx
    时间：2023.2.7
    描述：命令行解释器
*/

#ifndef MAIN_H
#define MAIN_H

// command line interface 命令行输入缓冲区
#define CLI_INPUT_SIZE 1024
// 最大参数数量 
#define CLI_PARAM_COUNT_MAX 16

// 定义转义字符串
#define ESC_CMD(Pn, cmd) "\x1b["#Pn#cmd 
#define ESC_CLEAR_SCREEN ESC_CMD(2, J)
#define ESC_MOVE_CURSOR(row, col) "\x1b["#row";"#col"H" 
// 控制台输出前景色和背景色
#define ESC_COLOR_ERROR ESC_CMD(31, m)
#define ESC_COLOR_DEFAULT ESC_CMD(39, m)
// 命令行命令
typedef struct _cli_cmd_t
{
    const char * name;
    const char * usage;     // 使用方法
    int (*do_func)(int argc, char ** argv);
}cli_cmd_t;

// 命令行
typedef struct _cli_t
{
    char curr_input[CLI_INPUT_SIZE];
    const cli_cmd_t * cmd_start;        // cmd表的开始和结尾
    const cli_cmd_t * cmd_end;
    const char * promot;                // 命令行前面固定的输出部分
}cli_t;

#endif // !MAIN_H